import { InjectionKey } from 'vue'
import { RootStateTypes } from './interface/index'
import { createStore, useStore as baseUseStore, Store } from 'vuex'

// Vite supports importing multiple modules from the file system using the special import.meta.glob function

// see https://cn.vitejs.dev/guide/features.html#glob-import

const modulesFiles = import.meta.globEager('./modules/*.ts')

const pathList: string[] = []

for (const path in modulesFiles) {
    pathList.push(path)
}

const modules = pathList.reduce((modules: { [x: string]: any }, modulePath: string) => {
    const moduleName = modulePath.replace(/^\.\/modules\/(.*)\.\w+$/, '$1')
    const value = modulesFiles[modulePath]
    modules[moduleName] = value.default
    return modules
}, {})

export const key: InjectionKey<Store<RootStateTypes>> = Symbol()

export const store = createStore<RootStateTypes>({ modules })

export function useStore() {
    return baseUseStore(key)
}



//
// import { defineStore } from 'pinia'
//
// // 定义store 通过 defineStore 函数，
//
// // 需要一个唯一的名称，该名称可以作为第一个参数传递，也可以用 id 熟悉传递。 使用它来将 store 连接到 devtools
// export const userStore = defineStore('main', {
//     state: () => {
//         return {
//             userInfo: {}
//         }
//     },
//     actions: {
//         setUserInfo(data: {}) {
//             // 可直接通过this访问state属性
//             this.userInfo = {ce: 111111111} || data
//         }
//     }
// })
//
// /* export const useMainStore = defineStore({
//        id: 'main'
//        // other options...
//    }) */
//
//
//
// import { InjectionKey } from 'vue'
// import { RootStateTypes } from './interface/index'
// import { createStore, useStore as baseUseStore, Store } from 'vuex'
//
// // Vite supports importing multiple modules from the file system using the special import.meta.glob function
//
// // see https://cn.vitejs.dev/guide/features.html#glob-import
//
// const modulesFiles = import.meta.globEager('./modules/*.ts')
//
// const pathList: string[] = []
//
// for (const path in modulesFiles) {
//     pathList.push(path)
// }
//
// const modules = pathList.reduce((modules: { [x: string]: any }, modulePath: string) => {
//     const moduleName = modulePath.replace(/^\.\/modules\/(.*)\.\w+$/, '$1')
//     const value = modulesFiles[modulePath]
//     modules[moduleName] = value.default
//     return modules
// }, {})
//
// export const key: InjectionKey<Store<RootStateTypes>> = Symbol()
//
// export const store = createStore<RootStateTypes>({ modules })
//
// export function useStore() {
//     return baseUseStore(key)
// }